# About

This projects aims to create a bridge for the chat programed used in [MoveNight](https://github.com/zorchenhimer/MovieNight/).
So far, this is work in progress.
At the moment it is a simple IRC server that relays messages back and forth.
Unfortunately, error handling is abscent, and errors from the MoveNight chat are not propagated.
But hey, it kinda works.

# Basic usage

By default, the ircd binds on port 6667 on all the available addresses.
Use the command line options `--port` and `--host` to change that.

The command line option `--url` specifies the URL for the MovieNight chat server
(usually it is `wss://movie-night-domain/ws`).

To produce logs set the env variables PLTSTDOUT or PLTSTDERR to "warning" or "info".
See the [Racket docs on loggers](https://docs.racket-lang.org/reference/logging.html) for details.

## Special commands

- `/STATS` provide some basic statistics about the stream

# Requirements & building

This developement is known to work on Racket v7.5 with packages:
- rfc6455 (websockets implementation, try `raco pkg install rfc6455`)

Build it with `raco make main.rkt` and run `racket main.rkt`.
Or: build native with `raco exe main.rkt`.

# TODOs

- Support for the user list. Specifically:
    + Handle WHO better
    + Handle nickname changes (via the /nick command)
    TODO: so far we only handle nickname changes *incoming* from movie night
- Better handling of error messages. E.g. in case of an invalid
  nickname, return the ERR_ and kill the connection to the client
- Handle /me actions
- Unfuck the HTML -- this is somewhat working, see unheck-html.rkt
- TESTS!!11


# Reading

- [Descriptions of some parts of the IRC protocol](http://chi.cs.uchicago.edu/chirc/index.html)
- [Official RFC](https://tools.ietf.org/html/rfc1459)
